package com.tanhua.server.controller;

import com.tanhua.domain.mongo.Movement;
import com.tanhua.domain.vo.RecommendUserQueryParam;
import com.tanhua.server.service.MovementsMqService;
import com.tanhua.server.service.MovementsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

@RestController
@RequestMapping("/movements")
public class MovementsController {

    @Autowired
    private MovementsService movementsService;

    @Autowired
    private MovementsMqService movementsMqService;


    //    谁看过我
//    1、请求方式 get
//    2、请求地址 /movements/visitors
//    3、请求参数 类型application/json 请求头上有Authorization
//    4、返回结果  List<RecommentUserVo>
    @GetMapping(value = "/visitors", name = "谁看过我")
    public ResponseEntity queryVisitors( ) {
        return movementsService.queryVisitors();
    }



//    发布朋友圈动态
//    1、请求方式 post
//    2、请求地址 /movements
//    3、请求参数 类型multipart/form-data  请求头上有Authorization
//        Body上带了很多参数 textContent  location  longitude  latitude 这四个直接使用 Movement对象接收
//         文件类型 imageContent
//    4、返回结果
    @PostMapping(name = "发布朋友圈动态")
//    这里千万不要加 @RequestBody
    public ResponseEntity saveMovements( Movement movement , MultipartFile[] imageContent) throws Exception{
        return movementsService.saveMovements(movement,imageContent);
    }

    //    查询好友的朋友圈动态
//    1、请求方式 get
//    2、请求地址 /movements
//    3、请求参数 类型application/json 请求头上有Authorization
//        Query上带了page  pagesize
//    4、返回结果分页对象 PageResult
    @GetMapping(name = "查询好友的朋友圈动态")
    public ResponseEntity queryFriendMovements(@RequestParam(defaultValue = "1") Integer page,
                                               @RequestParam(defaultValue = "10") Integer pagesize) {
        return movementsService.queryFriendMovements(page,pagesize);
    }


    //    查询推荐的朋友圈动态
//    1、请求方式 get
//    2、请求地址 /movements/recommend
//    3、请求参数 类型application/json 请求头上有Authorization
//        Query上带了page  pagesize
//    4、返回结果分页对象 PageResult
    @GetMapping(value = "/recommend", name = "查询推荐的朋友圈动态")
    public ResponseEntity queryRecommendMovements(@RequestParam(defaultValue = "1") Integer page,
                                               @RequestParam(defaultValue = "10") Integer pagesize) {
        return movementsService.queryRecommendMovements(page,pagesize);
    }


 //    查询指定用户或当期登录人的动态
//    1、请求方式 get
//    2、请求地址 /movements/all
//    3、请求参数 类型application/json 请求头上有Authorization
//        Query上带了page  pagesize userId
//    4、返回结果分页对象 PageResult
    @GetMapping(value = "/all", name = "查询指定用户或当期登录人的动态")
    public ResponseEntity queryMySelfMovements(@RequestParam(defaultValue = "1") Integer page,
                                                  @RequestParam(defaultValue = "10") Integer pagesize,
                                               @RequestParam(required = false) Long userId) {
        return movementsService.queryMySelfMovements(page,pagesize,userId);
    }


    //    对圈子动态点赞
//    1、请求方式 get
//    2、请求地址 /movements/:id/like
//    3、请求参数 类型application/json 请求头上有Authorization
//      路径参数带了ID 这个id就是圈子id 字符串类型
//    4、返回结果  点赞后的这个圈子的点赞数 integer
    @GetMapping(value = "/{id}/like", name = "对圈子动态点赞")
    public ResponseEntity movementLike(@PathVariable("id") String movementId ) {
        movementsMqService.sendMsg(movementId,2);
        return movementsService.movementLike(movementId);
    }


    //    对圈子动态取消点赞
//    1、请求方式 get
//    2、请求地址 /movements/:id/dislike
//    3、请求参数 类型application/json 请求头上有Authorization
//      路径参数带了ID 这个id就是圈子id 字符串类型
//    4、返回结果  点赞后的这个圈子的点赞数 integer
    @GetMapping(value = "/{id}/dislike", name = "对圈子动态取消点赞")
    public ResponseEntity movementDislike(@PathVariable("id") String movementId ) {

        movementsMqService.sendMsg(movementId,5);

        return movementsService.movementDislike(movementId);
    }



    //    对圈子动态喜欢
//    1、请求方式 get
//    2、请求地址 /movements/:id/love
//    3、请求参数 类型application/json 请求头上有Authorization
//      路径参数带了ID 这个id就是圈子id 字符串类型
//    4、返回结果  点赞后的这个圈子的点赞数 integer
    @GetMapping(value = "/{id}/love", name = "对圈子动态喜欢")
    public ResponseEntity movementlove(@PathVariable("id") String movementId ) {
        movementsMqService.sendMsg(movementId,3);

        return movementsService.movementlove(movementId);
    }


    //    对圈子动态取消喜欢
//    1、请求方式 get
//    2、请求地址 /movements/:id/unlove
//    3、请求参数 类型application/json 请求头上有Authorization
//      路径参数带了ID 这个id就是圈子id 字符串类型
//    4、返回结果  点赞后的这个圈子的点赞数 integer
    @GetMapping(value = "/{id}/unlove", name = "对圈子动态取消喜欢")
    public ResponseEntity movementUnlove(@PathVariable("id") String movementId ) {
        movementsMqService.sendMsg(movementId,6);
        return movementsService.movementUnlove(movementId);
    }

    //    查询单条的圈子动态
//    1、请求方式 get
//    2、请求地址 /movements/:id
//    3、请求参数 类型application/json 请求头上有Authorization
//      路径参数带了ID 这个id就是圈子id 字符串类型
//    4、返回结果  MovementVo
    @GetMapping(value = "/{id}", name = "查询单条的圈子动态")
    public ResponseEntity queryMovementById(@PathVariable("id") String movementId ) {
        movementsMqService.sendMsg(movementId,1);
        return movementsService.queryMovementById(movementId);
    }
}
